package com.mdp.sms.tencent.client;

import com.github.qcloudsms.*;
import com.github.qcloudsms.httpclient.HTTPException;
import com.mdp.core.err.BizException;
import com.mdp.core.utils.DateUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.io.IOException;
import java.text.SimpleDateFormat;

/**
 * 腾讯云发送短信的api
 * https://cloud.tencent.com/document/product/382/13613#%E6%8C%87%E5%AE%9A%E6%A8%A1%E6%9D%BF%E7%BE%A4%E5%8F%91%E7%9F%AD%E4%BF%A1
 * 
 * @author lyk
 * @cdate 2019/9/17 15:19
 */
@Service("mdp.sms.utils.SendSmsApi")
public class SendSmsApi {
	@Value("${mdp.sms.appid:1}")
	int appid;
	@Value("${mdp.sms.app-secret:}")
	String appkey;
	static Log log = LogFactory.getLog(SendSmsApi.class);
	
	public static String shieldPhone(String mobile) {
		if(StringUtils.hasText(mobile)&&mobile.length()==11) {
			return mobile.substring(0, 3)+"*****"+mobile.substring(8);
		}
		return mobile; 
	}

	public static String createExtendNo() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
		return sdf.format(DateUtils.getNowDate());
	}

	/**
	 * 用dateArr中的内容替换到originalStr复合Regex对应的内容 根据下标 eg： originalStr为：
	 * 尊敬的用户，您好，你的账号ID{1}于{2}在{3}登陆成功。{4}提醒您，如非本人操作，请忽略本短信。 Regex为：\\{\\d+\\
	 * dateArr为：{123,2019-09-18 14:54:53,广州市,擎勤科技有限公司} 最终的结果为：
	 * 尊敬的用户，您好，你的账号ID123于2019-09-18 14:54:53在广州市登陆成功。擎勤科技有限公司提醒您，如非本人操作，请忽略本短信。
	 */
	public static String arrayContentReplaceStringByRegex(String originalStr, String Regex, String[] dateArr) {
		for (String s : dateArr) {
			originalStr = originalStr.replaceFirst(Regex, s);
		}
		return originalStr;
	}

	/**
	 * 群发短信 nationCode 国际码"86"表示中国 phoneNumbers 电话号码数组["21212313123", "12345678902",
	 * "12345678903"] templateId 短信模板id params 短信模板参数 smsSign 短信签名 最后两个参数
	 */
	public SmsMultiSenderResult groupSendSms(String nationCode, String[] phoneNumbers, int templateId, String[] params,
			String smsSign, String extend, String ext) {
		try {
			SmsMultiSender msender = new SmsMultiSender(appid, appkey);
			SmsMultiSenderResult result = msender.sendWithParam(nationCode, phoneNumbers, templateId, params, smsSign,
					extend, ext);
			if (result.result != 0) {
				throw new BizException(result.errMsg);
			}
			return result;
		} catch (HTTPException e) {
			// HTTP 响应码错误
			throw new BizException(e.getMessage());
		}  catch (IOException e) {
			// 网络 IO 错误
			throw new BizException(e.getMessage());
		}
	}

	public SmsStatusPullReplyResult smsReply() {
		try {
			// Note: 短信拉取功能需要联系腾讯云短信技术支持（QQ：3012203387）开通权限
			int maxNum = 10; // 单次拉取最大量
			SmsStatusPuller spuller = new SmsStatusPuller(appid, appkey);
			// 拉取短信回执
			SmsStatusPullCallbackResult callbackResult = spuller.pullCallback(maxNum);
			System.out.println(callbackResult);
			// 拉取回复，国际/港澳台短信不支持回复功能
			SmsStatusPullReplyResult replyResult = spuller.pullReply(maxNum);
			System.out.println(replyResult);
			return replyResult;
		} catch (HTTPException e) {
			// HTTP 响应码错误
			throw new BizException(e.getMessage());
		}  catch (IOException e) {
			// 网络 IO 错误
			throw new BizException(e.getMessage());
		}
	}
}
